import axios from 'axios';
import { ElMessage } from 'element-plus';
import router from '../router';
import { getToken, clearAuth } from './auth';
//自己创建service对象，用来完成对系统的axios进行封装，自己创建service可以和系统的axios
//发送ajax请求，和系统axios默认不一样的是自定义的service可以携带凭证信息
const service = axios.create({
    //baseURL: process.env.VUE_APP_BASE_API || '/api', // 设置基础 URL
    //timeout: 10000, // 超时时间
    withCredentials:true,
    headers: {
        'Content-Type': 'application/json',
        'Accept': 'application/json',
        'X-Requested-With': 'XMLHttpRequest'
    },
});

// 请求拦截器 - 在发送请求之前做些什么
service.interceptors.request.use(
    config => {
        // 在发送请求之前做些什么
        // 例如：添加token到header
        const token = getToken();
        if (token) {
            config.headers['Authorization'] = `Bearer ${token}`;
        }
        
        // 添加自定义header
        config.headers['X-Custom-Header'] = 'custom-value';
        
        return config;
    },
    error => {
        // 对请求错误做些什么
        return Promise.reject(error);
    }
);

// 响应拦截器 - 对响应数据做点什么
service.interceptors.response.use(
    response => {
        // 对响应数据做点什么
        return response;
    },
    error => {
        // 对响应错误做点什么
        if (error.response) {
            // 服务器返回了错误状态码
            switch (error.response.status) {
                case 401:
                    // token过期或无效
                    ElMessage.error('登录已过期，请重新登录');
                    clearAuth();
                    router.push('/login');
                    break;
                case 403:
                    ElMessage.error('没有权限访问该资源');
                    break;
                case 404:
                    ElMessage.error('请求的资源不存在');
                    break;
                case 500:
                    ElMessage.error('服务器内部错误');
                    break;
                default:
                    ElMessage.error('请求失败，请稍后重试');
            }
        } else if (error.request) {
            // 请求已发出但没有收到响应
            ElMessage.error('网络连接失败，请检查网络');
        } else {
            // 请求配置出错
            ElMessage.error('请求配置错误');
        }
        return Promise.reject(error);
    }
);

export default service;